JavaScript Modul Gráf Optimalizálás: Függőségi Gráf Egyszerűsítése | MLOG | MLOG
            document.addEventListener("DOMContentLoaded", function() {
 var lazyloadImages = document.querySelectorAll("img.lazy");

 function lazyload () {
 lazyloadImages.forEach(function(img) {
 if (img.offsetTop < (window.innerHeight + window.pageYOffset)) {
 img.src = img.dataset.src;
 img.classList.remove("lazy");
 }
 });
 if(lazyloadImages.length === 0) {
 document.removeEventListener("scroll", lazyload);
 window.removeEventListener("resize", lazyload);
 window.removeEventListener("orientationChange", lazyload);
 }
 }

 document.addEventListener("scroll", lazyload);
 window.addEventListener("resize", lazyload);
 window.addEventListener("orientationChange", lazyload);
 });
            

Gyakorlati tanács: Alkalmazzon késleltetett betöltést képekre, videókra és más olyan erőforrásokra, amelyek nem láthatók azonnal a képernyőn. Fontolja meg olyan könyvtárak használatát, mint a `lozad.js` vagy a böngésző natív lazy-loading attribútumait.

6. Tree Shaking és Holt Kód Eltávolítása

A tree shaking egy olyan technika, amely eltávolítja a nem használt kódot az alkalmazásból a build folyamat során. Ez jelentősen csökkentheti a csomag méretét, különösen, ha olyan könyvtárakat használ, amelyek sok olyan kódot tartalmaznak, amire nincs szüksége.

Példa:

Tegyük fel, hogy egy segédfüggvény-könyvtárat használ, amely 100 függvényt tartalmaz, de Ön csak 5-öt használ belőlük az alkalmazásában. Tree shaking nélkül az egész könyvtár bekerülne a csomagba. A tree shaking segítségével csak az az 5 függvény kerül be, amelyet valóban használ.

Konfiguráció:

Győződjön meg róla, hogy a csomagolója be van állítva a tree shaking elvégzésére. A webpackben ez általában alapértelmezetten engedélyezve van production módban. A Rollup esetében szükség lehet a `@rollup/plugin-commonjs` plugin használatára.

Gyakorlati tanács: Konfigurálja a bundlert a tree shaking elvégzésére, és győződjön meg róla, hogy a kódja a tree shaking-kel kompatibilis módon van írva (pl. ES modulok használatával).

7. Függőségek Minimalizálása

A projektben lévő függőségek száma közvetlenül befolyásolhatja a modul gráf bonyolultságát. Minden függőség hozzáadódik a gráfhoz, potenciálisan növelve a build időt és a csomagméretet. Rendszeresen vizsgálja felül a függőségeit, és távolítsa el azokat, amelyekre már nincs szükség, vagy amelyeket kisebb alternatívákkal lehet helyettesíteni.

Példa:

Ahelyett, hogy egy nagy segédfüggvény-könyvtárat használna egy egyszerű feladatra, fontolja meg saját függvény írását vagy egy kisebb, specializáltabb könyvtár használatát.

Gyakorlati tanács: Rendszeresen vizsgálja felül a függőségeit olyan eszközökkel, mint az `npm audit` vagy a `yarn audit`, és azonosítsa a lehetőségeket a függőségek számának csökkentésére vagy kisebb alternatívákkal való helyettesítésükre.

8. Csomagméret és Teljesítmény Elemzése

Rendszeresen elemezze a csomagméretet és a teljesítményt a javításra szoruló területek azonosítása érdekében. Az olyan eszközök, mint a webpack-bundle-analyzer és a Lighthouse, segíthetnek azonosítani a nagy modulokat, a nem használt kódot és a teljesítménybeli szűk keresztmetszeteket.

Példa (webpack-bundle-analyzer):

Adja hozzá a `webpack-bundle-analyzer` plugint a webpack konfigurációjához.

            const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin;

module.exports = {
 // ... other webpack configuration
 plugins: [
 new BundleAnalyzerPlugin()
 ]
};

            

Amikor lefuttatja a buildet, a plugin egy interaktív fastruktúra-térképet (treemap) generál, amely megmutatja az egyes modulok méretét a csomagban.

Gyakorlati tanács: Integrálja a csomagelemző eszközöket a build folyamatába, és rendszeresen tekintse át az eredményeket az optimalizálási területek azonosítása érdekében.

9. Module Federation

A Module Federation, a webpack 5 egyik funkciója, lehetővé teszi a kód megosztását különböző alkalmazások között futásidőben. Ez hasznos lehet microfrontend-ek építéséhez vagy közös komponensek megosztásához különböző projektek között. A Module Federation segíthet csökkenteni a csomagméreteket és javítani a teljesítményt a kódduplikáció elkerülésével.

Példa (Alap Module Federation Beállítás):

Alkalmazás A (Host):

            // webpack.config.js
const ModuleFederationPlugin = require("webpack/lib/container/ModuleFederationPlugin");

module.exports = {
 // ... other webpack configuration
 plugins: [
 new ModuleFederationPlugin({
 name: "appA",
 remotes: {
 appB: "appB@http://localhost:3001/remoteEntry.js",
 },
 shared: ["react", "react-dom"]
 })
 ]
};

            

Alkalmazás B (Remote):

            // webpack.config.js
const ModuleFederationPlugin = require("webpack/lib/container/ModuleFederationPlugin");

module.exports = {
 // ... other webpack configuration
 plugins: [
 new ModuleFederationPlugin({
 name: "appB",
 exposes: {
 './MyComponent': './src/MyComponent',
 },
 shared: ["react", "react-dom"]
 })
 ]
};

            

Gyakorlati tanács: Fontolja meg a Module Federation használatát nagy, megosztott kóddal rendelkező alkalmazásokhoz vagy microfrontend-ek építéséhez.

Specifikus Bundler Megfontolások

A különböző csomagolóknak különböző erősségeik és gyengeségeik vannak a modul gráf optimalizálása terén. Íme néhány specifikus megfontolás a népszerű csomagolókhoz:

Webpack

Rollup

Parcel

Globális Perspektíva: Optimalizációk Alkalmazása Különböző Környezetekben

A modul gráfok optimalizálásakor fontos figyelembe venni azt a globális kontextust, amelyben az alkalmazást használni fogják. Az olyan tényezők, mint a hálózati körülmények, az eszközök képességei és a felhasználói demográfia, befolyásolhatják a különböző optimalizálási technikák hatékonyságát.

Összegzés

A JavaScript modul gráf optimalizálása a front-end fejlesztés kulcsfontosságú aspektusa. A függőségek egyszerűsítésével, a körkörös függőségek megszüntetésével és a code splitting bevezetésével jelentősen javíthatja a build teljesítményét, csökkentheti a csomagméretet és növelheti az alkalmazás betöltési sebességét. Rendszeresen elemezze a csomagméretet és a teljesítményt a javításra szoruló területek azonosítása érdekében, és igazítsa optimalizálási stratégiáit ahhoz a globális kontextushoz, amelyben az alkalmazást használni fogják. Ne feledje, hogy az optimalizálás egy folyamatos folyamat, és a folyamatos monitorozás és finomítás elengedhetetlen az optimális eredmények eléréséhez.

Ezen technikák következetes alkalmazásával a fejlesztők világszerte gyorsabb, hatékonyabb és felhasználóbarátabb webalkalmazásokat hozhatnak létre.